package god;

import java.util.Scanner;

public class J10SungJuk {
	public static void main(String[] args) {
		// 인풋을 배열로 받으려면
		// 주의 : Scanner 클래스를 시용해서 입력 처리를 하고
		//            close()를 하게 되면 다시 Scanner 생성불가
		// 시스템 콘솔을 사용하던가 Scanner를 선언하고 메서드에서 불러서 처리하는 방법이 있다.
		// 특정 기능을 수행하는 메서드에서는 그 기능에 관련된 내용만 입력하도록 한다.               그래서 Scanner를 불러서 사용하는게 낫다.
		String name = "";
			// String name[] = new String[2];
		int kor = 0, eng = 0, mat = 0;
			// int point[] = new int[4]; - kor 1개, eng 1개, mat 1개씩 사용해야 하고 1번부터 사용하기 위해 +1을 해서 4로 지정
		int tot = 0;
		double avg = 0;
		char grd = ' ';
		
		name = inputName( makeScanner() );								// makeScanner를 호출해서 실행하여 return 값인 sc를 받아서 inputName 메서드 실행
		kor = getKor( makeScanner() );
		eng = getEng( makeScanner() );
		mat = getMat( makeScanner() );
		tot = getTot(kor, eng, mat);
		avg = getAverage(tot);
		grd = getGrade(avg);
	
		System.out.println(name);		
		System.out.println(kor);
		System.out.println(eng);
		System.out.println(mat);
		System.out.println(tot);
		System.out.println(avg);
		System.out.println(grd);
}
	
// Scanner 생성
public static Scanner makeScanner() {										// sc 의 유형은 Scanner.
		Scanner sc = new Scanner(System.in);
		return sc;
}

// Scanner 소멸
public static void closeScanner(Scanner sc) {							// makeScanner가 return 하는 Scanner형 sc 를 받아서 닫아주는 메서드
	sc.close();
}
	
private static String inputName(Scanner sc) {
	String name;
	System.out.println("이름을 입력해주세요.");
	name = sc.next();																
	return name;
}

private static int getKor(Scanner sc) {
	int kor;
	System.out.println("국어 성적을 입력해주세요.");
	kor = sc.nextInt();
	return kor;
}

private static int getEng(Scanner sc) {
	int eng;
	System.out.println("영어 성적을 입력해주세요.");
	eng = sc.nextInt();
	return eng;
}

private static int getMat(Scanner sc) {
	int mat;
	System.out.println("수학 성적을 입력해주세요.");
	mat = sc.nextInt();
	closeScanner(sc);																	// closeScanner 메서드를 불러와서 sc를 받아서 닫아줌
	return mat;
}

private static int getTot(int kor, int eng, int mat) {
	return kor + eng + mat;
}

private static double getAverage(int tot) {
	return (double)tot / 3;
}

private static char getGrade(double avg) {
	char grd;
	switch((int)avg / 10) {
		case 10 :
		case 9 : grd = '수';	break;
		case 8 : grd = '우';	break;
		case 7 : grd = '미';	break;
		case 6 : grd = '양';	break;
		default  : grd = '가';
		}
	return grd;
}

}
